package transaction_demo;

import transaction_demo.Util.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * 1.有事务，有commit -- 保持一致性
 * @author haomin
 * @date 2022/04/08 20:17
 **/
public class Demo1 {
    public static void main(String[] args) throws SQLException {
        String sql1 = "insert into records (rid,bid) values (2,2)";
        String sql2 = "update books set stock = stock - 1 where bid = 2";

        //同一个事务中，必须在一条 Connection 完成
        try(Connection c = DBUtil.connection()){
            // connection 中有一个 自动提交（autocommit）的属性，默认情况下，是 true（开启）
            // 关闭 connection 的自动提交
            c.setAutoCommit(false);


            try(PreparedStatement ps = c.prepareStatement(sql1)){
                ps.executeUpdate();
            }
            try(PreparedStatement ps = c.prepareStatement(sql2)){
                ps.executeUpdate();
            }

            //事务提交，若没有commit 真实数据不会被改变
            c.commit();
        }
    }
}